package com.sunlake.spring.main.model.counselor.service;

import com.sunlake.spring.main.common.response.R;
import com.sunlake.spring.main.model.counselor.dto.ListRecentDTO;
import com.sunlake.spring.main.model.counselor.dto.ResumeMergeDTO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

/**
 * 咨询师申请服务接口
 * 定义咨询师简历上传、分片上传和分片合并的业务逻辑方法
 */
public interface CounselorApplyService {

    void afterPropertiesSet() throws Exception;

    /**
     * 上传简历文件
     */
    R<Map<String, Object>> uploadResume(MultipartFile file) throws IOException;

    /**
     * 分片上传简历
     */
    R<Map<String, Object>> uploadResumeChunk(MultipartFile chunk, String md5, Integer index) throws IOException;

    /**
     * 合并分片文件
     */
    R<Map<String, Object>> mergeResume(ResumeMergeDTO mergeDTO) throws IOException;

    /**
     * 列表最近上传的简历
     */
    R<Map<String, Object>> getResumesByEmail(ListRecentDTO listRecentDTO);

    /**
     * 获取简历文件的元信息（文件大小、是否支持断点续传、内容类型、文件名）
     */
    Map<String, Object> getResumeMeta(Long resumeId);

    /**
     * 整文件下载（不使用 Range）
     */
    void downloadResume(Long resumeId, HttpServletResponse response) throws IOException;

    /**
     * 范围下载（断点续传） start 和 end 为包含的字节区间，end 为包含末尾的字节索引
     */
    void downloadResumeRange(Long resumeId, long start, long end, HttpServletResponse response) throws IOException;
}